package com.yoyoyo666.report.common;

import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.cache.caffeine.CaffeineCache;
import org.springframework.cache.support.SimpleCacheManager;

import java.util.ArrayList;
import java.util.concurrent.TimeUnit;

public class MySimpleCacheManager extends SimpleCacheManager {
    public MySimpleCacheManager() {
        ArrayList<CaffeineCache> caches = new ArrayList<CaffeineCache>();
        for(Caches c : Caches.values()){
            caches.add(new CaffeineCache(c.name(),
                    Caffeine.newBuilder().recordStats()
                            .expireAfterWrite(c.getTtl(), TimeUnit.SECONDS)
                            .maximumSize(c.getMaxSize())
                            .build())
            );
        }
        this.setCaches(caches);
    }
}
/**
 * 定义cache名称、超时时长（秒）、最大容量
 * 每个cache缺省：10秒超时、最多缓存50000条数据，需要修改可以在构造方法的参数中指定。
 */
enum Caches{
    TEMP_CACHE(600),          //有效期60秒
    DEFAULT_MAX(10000),
    ;
    public static final int DEFAULT_MAXSIZE = 10000;
    public static final int DEFAULT_TTL = 600;
    Caches() {
    }
    Caches(int ttl) {
        this.ttl = ttl;
    }
    Caches(int ttl, int maxSize) {
        this.ttl = ttl;
        this.maxSize = maxSize;
    }
    private int maxSize=10000;    //最大數量
    private int ttl=600;        //过期时间（秒）
    public int getMaxSize() {
        return maxSize;
    }
    public int getTtl() {
        return ttl;
    }
}